import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa a un objeto que esta encargado de verificar
 * los barcos destruidos por los jugadores.
 * Tambien decide quien gana el juego.
 * @author Miguel Martinez Aguilar
 * @version 03 de Mayo del 2013
 */
public class Evaluador extends ScrollActor
{
    // Declaracion de variables de instancia
    private int iz;// es el contador de barcos funcionales del jugador de la izquierda.
    private int de;// es el contador de barcos funcionales del jugador de la derecha.
    private Barco[] barcoI;// es un arreglo de los barcos del jugador de la izquierda.
    private Barco[] barcoD;// es un arreglo de los barcos del jugador de la derecha.
    private Barco eliminado;// es el barco actualmente eliminado.
    private GreenfootImage img;// es la imagen de led rojo que evaluador coloca a los barcos eliminados.
    private Panel panel;// es el panel que controla el juego.
    
    /**
     * Constructor de Evaluador.
     * @param panel: el panel al que se referira Evaluador.
     */
    public Evaluador(Panel panel) 
    {
        iz = de = 0;
        barcoI = new Barco[10];
        barcoD = new Barco[10];
        eliminado = null;
        img = new GreenfootImage("led0.png");
        this.panel = panel;
    }
    
    /**
     * Este metodo agrega un barco a la lista correspondiente.
     * @param barco: el barco que se agregara.
     * @param bimg: el objeto imagen que representara al barco.
     * @param derecha: boleano que indica a que lista se agregara el barco (izquierda o derecha).
     */
    public void agregaBarco(Barco barco, BarcoImg bimg, boolean derecha) 
    {
        ScrollWorld mundo = super.getWorld();// este metodo nos permite acceder al mundo
        if(derecha){
            barcoD[de] = barco;
            mundo.addObject(barco, 685, 471 - (de * 40));
            barco.asignaBarcoImg(bimg);
            de++;
        }
        else{
            barcoI[iz] = barco;
            mundo.addObject(barco, 652, 471 - (iz * 40));
            barco.asignaBarcoImg(bimg);
            iz++;
        }
        if(derecha)if(bimg != null)bimg.revez();
        if(de == 10)de--;
        if(iz == 10)iz--;
    }
    
    /**
     * Este metodo pone en rojo un barco que fue destruido.
     * @param derecha: boleano que indica a que lista se le quitara un barco destruido.
     */
    public void derrotar(boolean derecha) 
    {
        if(derecha){
            barcoD[de].setImage(img);
            de--;
            if(de < 0)panel.ganador(true);
        }
        else{
            barcoI[iz].setImage(img);
            iz--;
            if(iz < 0)panel.ganador(false);
        }
    }
    
    /**
     * Este metodo explota un barco eliminado. <p>
     * Regresa un boleano que indica si se a destruido por completo un barco.
     */
    public boolean explotaBarco()
    {
        boolean val = false;
        if(contador(50)){
            if(eliminado != null)eliminado.quitaFuego();
            val = true;
        }
        if(cont == 45){
            eliminado.explota();
            Greenfoot.playSound("explosion.wav");
        }
        return val;
    }
    
    /**
     * Este metodo le da al Evaluador el barco eliminado.
     * @param barco: el barco que fue eliminado.
     */
    public void asignaElim(Barco barco)
    {
        eliminado = barco;
    }
}